home *** CD-ROM | disk | FTP | other *** search
/ BBS in a Box 1 / BBS in a box - Trilogy I.iso / Files / Publish / Photoshop / Plug-in Modules / Code / PIFormat.h < prev    next >
Encoding:
C/C++ Source or Header  |  1993-04-26  |  6.7 KB  |  176 lines  |  [TEXT/MPS ]

  1. /*
  2.     File: PIFormat.h
  3.  
  4.     Copyright 1992 by Adobe Systems, Inc..    All rights reserved.
  5.  
  6.     This file describes version -5 of Photoshop's plug-in image format interface.
  7. */
  8.  
  9. #ifndef __PIFormat__
  10. #define __PIFormat__
  11.  
  12. #include "PIGeneral.h"
  13.  
  14. /* Operation selectors */
  15.  
  16. #define formatSelectorAbout              0
  17.  
  18. #define formatSelectorReadPrepare         1
  19. #define formatSelectorReadStart          2
  20. #define formatSelectorReadContinue         3
  21. #define formatSelectorReadFinish         4
  22.  
  23. #define formatSelectorOptionsPrepare     5
  24. #define formatSelectorOptionsStart         6
  25. #define formatSelectorOptionsContinue     7
  26. #define formatSelectorOptionsFinish      8
  27.  
  28. #define formatSelectorEstimatePrepare     9
  29. #define formatSelectorEstimateStart     10
  30. #define formatSelectorEstimateContinue    11
  31. #define formatSelectorEstimateFinish    12
  32.  
  33. #define formatSelectorWritePrepare        13
  34. #define formatSelectorWriteStart        14
  35. #define formatSelectorWriteContinue     15
  36. #define formatSelectorWriteFinish        16
  37.  
  38. /*    We keep various pieces of information about the file format in the PiMI resource.
  39.     Here is the structure of that resource. */
  40.  
  41. typedef struct FormatInfo
  42.     {
  43.  
  44.     PlugInInfo    plugInInfo;             /* The information common to all plug-ins.            */
  45.     short        typeCount;                /* The number of types in the type list.            */
  46.     short        extensionCount;         /* The number of extensions in the type list.        */
  47.     Boolean     canRead;                /* Can we read using this format?                    */
  48.     Boolean     readsAllTypes;            /* Can this plug-in read from all files?            */
  49.     Boolean     canWrite;                /* Can we write using this format?                    */
  50.     Boolean        canWriteIfRead;            /* Can we write if we read using this format?         */
  51.     Boolean     savesImageResources;    /* Does this file format save the resource data.    */
  52.     Boolean        padFlag;                /* Padding */
  53.     short        maxChannels [16];        /* Maximum # of channels with each plug-in mode.    */
  54.     short        maxRows;                /* Maximum rows allowed in document.                */
  55.     short        maxCols;                /* Maximum columns allowed in document.             */
  56.     OSType        fileType;                /* The file type if we create a file.                */
  57.     OSType        creatorType;            /* The creator type if we create a file.            */
  58.     OSType        typeList [1];            /* The types and extensions supported.                */
  59.  
  60.     }
  61. FormatInfo;
  62.  
  63. /*    Error return values. The plug-in module may also return standard Macintosh
  64.     operating system error codes, or report its own errors, in which case it
  65.     can return any positive integer. */
  66.  
  67. #define formatBadParameters -30500
  68. #define formatCannotRead    -30501
  69.  
  70. typedef struct FormatRecord
  71.     {
  72.  
  73.     long                serialNumber;    /* Host's serial number, to allow
  74.                                            copy protected plug-in modules. */
  75.  
  76.     TestAbortProc        abortProc;        /* The plug-in module may call this no-argument
  77.                                            BOOLEAN function (using Pascal calling
  78.                                            conventions) several times a second during long
  79.                                            operations to allow the user to abort the operation.
  80.                                            If it returns TRUE, the operation should be aborted
  81.                                            (and a positive error code returned). */
  82.  
  83.     ProgressProc        progressProc;    /* The plug-in module may call this two-argument
  84.                                            procedure (using Pascal calling conventions)
  85.                                            periodically to update a progress indicator.
  86.                                            The first parameter (type LONGINT) is the number
  87.                                            of operations completed; the second (type LONGINT)
  88.                                            is the total number of operations. */
  89.  
  90.     int32                maxData;        /* Maximum number of bytes that should be
  91.                                            passed back at once, plus the size of any
  92.                                            interal buffers. The plug-in may reduce this
  93.                                            value in the formatSelectorPrepare routine. */
  94.  
  95.     int32                minDataBytes;    /* Disk space needed for the data fork. */
  96.     int32                maxDataBytes;    /* Disk space needed for the data fork. */
  97.  
  98.     int32                minRsrcBytes;    /* Disk space needed for the resource fork. */
  99.     int32                maxRsrcBytes;    /* Disk space needed for the resource fork. */
  100.  
  101.     int32                dataFork;        /* refnum for the data fork. */
  102.     int32                rsrcFork;        /* refnum for the resource fork. */
  103.     
  104.     FSSpec *            fileSpec;        /* Full file specification. */
  105.  
  106.     short                imageMode;        /* Image mode */
  107.     Point                imageSize;        /* Size of image */
  108.     short                depth;            /* Bits per sample, currently must be 1 or 8 */
  109.     short                planes;         /* Samples per pixel */
  110.  
  111.     Fixed                imageHRes;        /* Pixels per inch */
  112.     Fixed                imageVRes;        /* Pixels per inch */
  113.  
  114.     LookUpTable            redLUT;         /* Red LUT, only used for Indexed Color images */
  115.     LookUpTable            greenLUT;        /* Green LUT, only used for Indexed Color images */
  116.     LookUpTable            blueLUT;        /* Blue LUT, only used for Indexed Color images */
  117.  
  118.     void *                data;            /* A pointer to the returned image data. The
  119.                                            plug-in module is responsible for freeing
  120.                                            this buffer. Should be set to NIL when
  121.                                            all the image data has been returned. */
  122.  
  123.     Rect                theRect;        /* Rectangle being returned */
  124.     short                loPlane;        /* First plane being returned */
  125.     short                hiPlane;        /* Last plane being returned */
  126.     short                colBytes;        /* Spacing between columns */
  127.     long                rowBytes;        /* Spacing between rows */
  128.     long                planeBytes;     /* Spacing between planes (ignored if only one
  129.                                            plane is returned at a time) */
  130.     PlaneMap            planeMap;        /* Maps plug-in plane numbers to host plane
  131.                                            numbers.  The host initializes this is a linear
  132.                                            mapping.  The plug-in may change this mapping if
  133.                                            it sees the data in a different order. */
  134.  
  135.     Boolean             canTranspose;    /* Is the host able to transpose the image? */
  136.     Boolean             needTranspose;    /* Does the plug-in need the image transposed? */
  137.  
  138.     OSType                hostSig;        /* Creator code for host application */
  139.     HostProc            hostProc;        /* Host specific callback procedure */
  140.  
  141.     short                hostModes;        /* Used by the host to inform the plug-in which
  142.                                            imageMode values it supports.  If the corresponding
  143.                                            bit (LSB = bit 0) is 1, the mode is supported. */
  144.  
  145.     Handle                revertInfo;     /* Information to be kept with the document for reverting or
  146.                                            saving.    Where possible this handle should be used to
  147.                                            avoid bringing up an options dialog. */
  148.  
  149.     NewPIHandleProc        hostNewHdl;     /* Handle allocation and disposal for revert info. */
  150.     DisposePIHandleProc    hostDisposeHdl;
  151.     
  152.     Handle                imageRsrcData;    /* Handle containing the block of resource data. */
  153.     int32                imageRsrcSize;    /* size of image resources. */
  154.  
  155.     PlugInMonitor        monitor;        /* The host's monitor. */
  156.  
  157.     void *                platformData;    /* Platform specific information. */
  158.  
  159.     BufferProcs *        bufferProcs;    /* The procedures for allocating and */
  160.                                         /* releasing buffers. */
  161.                                         
  162.     ResourceProcs *        resourceProcs;    /* Plug-in resource procedures. */
  163.  
  164.     ProcessEventProc    processEvent;    /* Pass event to the application. */
  165.     
  166.     DisplayPixelsProc    displayPixels;    /* Display dithered pixels. */
  167.  
  168.     HandleProcs            *handleProcs;    /* Platform independent handle manipulation. */
  169.  
  170.     char                reserved [248]; /* Set to zero */
  171.  
  172.     }
  173. FormatRecord, *FormatRecordPtr;
  174.  
  175. #endif
  176.